package com.unionpay.service.common.excel.example;

import com.rpcservice.common.Log;
import com.rpcservice.common.utils.ComMapUtils;
import com.unionpay.service.ServiceBase;
import com.unionpay.service.common.excel.Excel;
import com.unionpay.service.common.excel.ExcelField;
import com.unionpay.service.common.excel.ExcelMapper;
import com.unionpay.service.common.excel.FieldHandle;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @ClassName ExcelExportTest
 * @Description: excel导出
 * @Author xsl
 * @Date 2021/1/18
 */
public class ExcelExportTest extends ServiceBase {

    public List<Map<String, Object>> excelExport(Map<String, Object> mapParams) {
            //年龄处理，原本年龄数据加 18岁，实际上FieldHandle可以做任何代码能做到的数据处理
            FieldHandle<Integer,Integer> fieldHandle = field -> field + 18;
            //字段与文件单元格位置的关系映射
            ExcelMapper excelMapper = ExcelMapper.build()
                    .addField(ExcelField.build("no",0))
                    .addField(ExcelField.build("name",1))
                    .addField(ExcelField.build("age",2,/*字段可以定义一个处理器处理数据*/fieldHandle));

            Excel excel = Excel.getExcel("test哈哈哈.xlsx", "测试文件导出", 1, excelMapper);
            List<Map<String,Object>> list = new ArrayList<>();
            // 1048575  excel本身支持一个sheet最大的行数，如果更大需要分sheet或者分文件导出
            for (int i = 0; i < 1048575; i++) {
                Map<String, Object> map = ComMapUtils.newHashMap(3);
                map.put("no",i);
                map.put("name","name_"+i);
                map.put("age",i % 82);
                list.add(map);
            }

            //数据写入Excel
            excel.writeExcel(list);
            //文件持久化
            String s = excel.writeFile();
            //如果是写入输出流可以用这个方法
//            excel.writeStream(out);
            Log.trace(s);
            excel.close();
            return getReturnSuccess();
    }
}